/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.model;

import java.io.File;
import java.io.FileFilter;

import org.zhiqim.kernel.util.Strings;
import org.zhiqim.kernel.util.Validates;

/**
 * 常用过滤器，Filter/FileFilter/FilenameFilter
 *
 * @version v7.0.0 @author zouzhigang 2021年6月23日 新建与整理
 */
public class Filters
{
    /**********************************************************************************/
    //定义过滤类
    /**********************************************************************************/

    public static final Jar JAR         = new Jar();
    public static final Class CLASS     = new Class();
    
    /**********************************************************************************/
    //定义过滤类
    /**********************************************************************************/
    
    /** Jar文件，支持.jar&.zip结尾 */
    public static class Jar implements FileFilter
    {
        public boolean accept(File file)
        {
            String name = file.getName().toLowerCase();
            return file.isFile() && (name.endsWith(".jar") || name.endsWith(".zip"));
        }
    }
    
    /** 文件后缀过滤器，要求结尾的 */
    public static class EndsWithFile implements FileFilter
    {
        private String suffix;

        public EndsWithFile(String suffix)
        {
            this.suffix = suffix;
        }

        @Override
        public boolean accept(File file)
        {
            String name = file.getName().toLowerCase();
            return name.endsWith(suffix);
        }
    }
    
    /** class文件 */
    public static class Class implements Filter
    {
        public boolean accept(String name)
        {
            return Strings.endsWith(name, ".class");
        }
    }
    
    /** 通用名称过滤器，要求结尾的 */
    public static class EndsWithName implements Filter
    {
        private String suffix;
        
        public EndsWithName(String suffix)
        {
            this.suffix = suffix;
        }
        
        @Override
        public boolean accept(String name)
        {
            return Validates.isEmpty(suffix) || name.endsWith(suffix);
        }
    }
}
